<?php

class Core
{
	// 保存例实例在此属性中
	private static $_instance;
	
	private $_requestData;
	private $_responseData;
	
	// 构造函数声明为private,防止直接创建对象
	private function __construct()
	{
	}
	
	// 加载所需要的文件
    private static function _LoadMygcFile()
    {
    	// 加载服务处理所需文件
	    $loadFileList = array();
	    $configList = array(
	        LIB_CORE_PATH.'Proxy.class.php',
	        LIB_CORE_PATH.'DataTpl.class.php',
	        LIB_CORE_PATH.'Data.class.php',
	    );
	    $loadFileList = array_merge( $loadFileList, $configList );
	    
	    foreach ( $loadFileList as $key => $file ) {
	        if( is_file( $file ) ) {
	        	require_cache( $file );
	        }
	        else {
	        	// exception
	        }
	    }
    }
	
	// 单例方法
	public static function GetInstance()
	{
		if(! (self::$_instance instanceof self) )
	    {
	        self::$_instance = new self();
	    }
		return self::$_instance;
	} 
	
	// 自动加载所使用的文件
	public static function Autoload( $class )
	{
		debug_log( 'autoload class ==========> '.$class );
		// 扩展模块
		if( substr( $class, 0, 7 ) == 'DataTpl' ) { // 加载固定数据
			$file = LIB_DATATPL_PATH.$class.'.php';
			debug_log( 'autoload file ==========> '.$file );
            require_cache( $file );
        }
	}
	
	public function preload( $requestdata )
	{
		$this->_requestData = $requestdata;
	}
	// 具体处理入口
    public function start() 
    {
debug_log( '============ define path ===========' );
debug_log( RES_PATH );
debug_log( DATA_PATH );
debug_log( LOG_PATH );
debug_log( COMMON_PATH );
debug_log( CONF_PATH );
debug_log( EXTEND_PATH );
debug_log( LIB_PATH );
debug_log( LIB_ACTION_PATH );
debug_log( LIB_CORE_PATH );
debug_log( LIB_DATATPL_PATH );
debug_log( LIB_DB_PATH );
debug_log( LIB_MODEL_PATH );
debug_log( '====================================' );

    	// 注册AUTOLOAD方法
    	spl_autoload_register( array( 'Core', 'Autoload' ) );
    	
    	// 加载处理所需的文件
    	self::_LoadMygcFile();
    	
    }
	
	public function proccess()
	{
    	// 进行具体的处理
    	if ( isset( $this->_requestData ) ) {
    		$this->_responseData = Proxy::Handle( $this->_requestData );
    	}
    	else {
    		// exception
    	}
	}

    // 处理结果
    public function result()
    {
    	return $this->_responseData;
    }
}

?>